/*
 * SwingWorkerPreview.java	 
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/11, 11:23:38 AM
 */
package com.ufps.cuatro.util.generadores.worker;

import java.awt.Dimension;

import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.SwingWorker;

import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidor;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorContenedor;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorClaseCompleja;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorEnum;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorString;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorUnitario;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorVinculador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegrador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorModeloAsociado;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.generadores.GeneradorGUI;
import com.ufps.cuatro.vistas.plantilla.JDialogPreviewModeloAsociado;
import javax.swing.JMenuBar;

/**
 * <i><b>SwingWorkerPreview:</b></i><p>Se Encarga de Ejecutar los Procesos de
 * Representaciones de Vistas PRevias en Segundo Plano.</p>
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/11
 */
public class SwingWorkerPreview extends SwingWorker<JPanel, Void>{
    private JPanel objPanelPreview;
    private ComponenteDistribuidor objComponente;

    /**
     * Crear un Instancia para Ejecución del Proceos en Segundo Plano.
     * @param objComponente Componente al cual se le generará la Representación Gráfica.
     */
    public SwingWorkerPreview(ComponenteDistribuidor objComponente) {
        this.objComponente = objComponente;
    }        

    @Override
    protected JPanel doInBackground() throws Exception {                                    
        objPanelPreview = GeneradorGUI.crearVistaPreviaPanel(objComponente);
        return objPanelPreview;
    }

    @Override
    protected void done() {
        if(objPanelPreview != null){
            config(objPanelPreview);
        }
    }

    private void config(JPanel objPanelPreview){
        if(objPanelPreview != null){                
            if(objComponente instanceof ComponenteDistribuidorModeloAsociado){ 
                JDialogPreviewModeloAsociado objVentana = new JDialogPreviewModeloAsociado();                    
                GeneradorGUI.generarDistribuciondialog(objPanelPreview, objVentana);
                objVentana.setBackground(objPanelPreview.getBackground());
                objVentana.setTitle(objComponente.getName());                 
                view(objVentana, objPanelPreview);
            }
            else{            
                JDialog objVentana = new JDialog();                    
                if(objComponente instanceof ComponenteDistribuidorGeneradorClaseCompleja ||
                        objComponente instanceof ComponenteDistribuidorGeneradorVinculador ||
                        objComponente instanceof ComponenteDistribuidorIntegrador ||
                        objComponente instanceof ComponenteDistribuidorContenedor ||
                        objComponente instanceof ComponenteDistribuidorGeneradorUnitario ||
                        objComponente instanceof ComponenteDistribuidorGeneradorString ||
                        objComponente instanceof ComponenteDistribuidorGeneradorEnum){
                    objVentana.setTitle(objComponente.getStrTitulo());
                    
                    if(objComponente instanceof ComponenteDistribuidorGeneradorClaseCompleja ||                 
                        objComponente instanceof ComponenteDistribuidorIntegrador ||
                        objComponente instanceof ComponenteDistribuidorContenedor){
                        ComponenteDistribuidor objComponenteDistribuidor = objComponente;
                        if(objComponenteDistribuidor.hasMenuAvailable()){
                            JMenuBar objBarramenu = GeneradorGUI.createMenu(objComponenteDistribuidor);
                            //Asignación del Menu al la ventana
                            objVentana.setJMenuBar(objBarramenu);
                        }
                    }
                }
                else{
                    objVentana.setTitle(objComponente.getName());
                } 
                view(objVentana, objPanelPreview);
            }
        }
    }

    private void view(JDialog objVentana, JPanel objPanelPreview){
        objVentana.add(objPanelPreview);
        objVentana.setLocationRelativeTo(Utileria.objFrame);            
        Dimension d = GeneradorGUI.getDimesionDefaulPreviewOnlyPanel(objComponente);
        objVentana.setMinimumSize(d);        
        objVentana.setSize(d);
        objVentana.setModal(true);
        objVentana.setIconImage(Utileria.leerIconoAppEnImagen(Utileria.MODO_16x16).getImage());                           
        objVentana.pack();
        objVentana.setLocation(Utileria.objEscritorio.getLocationOnScreen());
        objVentana.setVisible(true);   
    }        
}